﻿/*
 *
 * index.html 에 현재 이 파일 포함 시켜 놓았습니다.
 * 이곳에 andorid , ios 각각 필요한 펑션을 정의 하고
 * http://121.162.170.243:8787/JustWar/android  <- android
 * http://121.162.170.243:8787/JustWar/ios <- ios
 * 위의 주소로 각각 접근하면 테스트 가능합니다.
 * 파일명은 임시로 common_android.js 정했고, 여기에 클래스별로 정의를 해두면 나중에 필요에따라
 * 잘라서 각자 파일로 만들도록 하겟습니다.
 * 기타 불편한 사항은 전화로도 연락주시면 바로 처리해드릴 수 있도로 하겠습니다.
 *
 */

var common = {
	/*
	 * Apply inappbilling service use custom plugin 안드로이드 인앱 결제모듈 플러그인 초기화
	 * 코드입니다. 주석만 제거하면 네이티브에 있는 플러그인을 이용하여 초기화를 수행합니다.
	 * www/js/inApp/inappbilling.js 파일을 추가하여 수행합니다.
	 */
	initInAppBilling : function() {
		console.log('Common : initInAppBilling');
		inappbilling.init(successHandler, errorHandler);
	},
	/*
	 * Apply GCM(Google Cloud Message) service use custom plugin Push 서비스를 이용하기
	 * 위해 초기화를 수행하는 부분입니다. 주석을 제거하면 네이티브에 있는 플러그인을 이용하여 초기화를 수행합니다.
	 * www/js/GCM/GCMPlugin.js 파일을 추가하여 수행합니다. senderID : index.html 에서 넘어오는
	 * 파라메터이고, Google API 넘버입니다. 귀사의 Google 계정에 있는 넘버를 사용하였습니다. "GCM_Event" :
	 * GCM 서비스에서 사용하는 Callback 함수 이름입니다. 이 파일 중간에 GCM_Event 함수가 구현되어있습니다.
	 * Success, Fail : 서비스 등록 시 사용할 Callback 입니다.
	 */
	initGCMService : function(senderID) {
		console.log('Common : initGCMService');
		window.GCM.register(senderID, "GCM_Event", GCM_Success, GCM_Fail);
	},
	// Bind Event Listeners
	/*
	 * 애플리케이션의 상태를 관리하기 위한 콜백을 등록합니다. 현재는 네트워크 상태가 offline 으로 변하였을 때 Native
	 * Plugin을 호출하는 것만 구현되어있습니다. 구체적인 처리 방법은 회의를 통해 결정하면 될 것 같습니다.
	 */
	bindEvents : function() {
		document.addEventListener('pause', this.onPause, false);
		document.addEventListener('resume', this.onResume, false);
		document.addEventListener('online', this.onOnline, false);
		document.addEventListener('offline', this.onOffline, false);
		document.addEventListener('backbutton', this.onBackKeyDown, true);
	},
	onPause : function() {
		console.log('Common : onPause');
	},
	onResume : function() {
		console.log('Common : onResume');
	},
	onOnline : function() {
		console.log('Common : onOnline');
		return Cordova.exec(successHandler, errorHandler, 'BridgePlugin',
				'network', [ 'online' ]);
	},
	onOffline : function() {
		console.log('Common : onOffline');
		return Cordova.exec(successHandler, errorHandler, 'BridgePlugin',
				'network', [ 'offline' ]);
	},
	onBackKeyDown : function() {
		navigator.notification.confirm('종료하시겠습니까?', onBackKeyDownMsg, 'JustWar',
				'취소, 종료');
	},
	/*
     * 화면 전체의 터치 처리를 담당합니다.
     * isTouch : 'able' / 'disable'
     *
     * 화면 전환시 호출하여 터치 입력을 막을 때 활용할 수 있습니다.
     */
	allTouchControl : function(isTouch) {
		return Cordova.exec(successHandler, errorHandler, 'BridgePlugin',
				'touch', [ isTouch ]);
	},
	/*
     * Index에 따라 버튼의 이미지를 바꿔줍니다.
     * Index의 범위는 현재 게임의 메뉴 인덱스와 동일한 1~6입니다.
     * (News, Mission, War, Unit, Building, General)
     * 웹 상에서 메뉴 전환 시 호출하여 네이티브 버튼의 이미지를 변경할 수 있습니다.
     */
	changeMenuButton : function(btnIndex) {
		return Cordova.exec(successHandler, errorHandler, 'BridgePlugin',
				'changemenu', [ btnIndex ]);
	},
	/*
	 * itemID로 인앱 결제를 요청합니다.
	 * 결제가 완료되면 COMMON_Event의 billingSuccess 가 호출됩니다.
	 */
	startInAppPurchase : function(itemID) {
		return inappbilling.purchase(successHandler, errorHandler, itemID);
	},
	/*
     * 로그인 후 결과에 따라 해당하는 로직을 수행합니다.
     * loginState : 'success' / 'fail'
     */
	loginResult : function(loginState) {
		return Cordova.exec(successHandler,errorHandler,'BridgePlugin','login',[loginState]);
	}
};

/*
 * Application 종료 코드 이 부분에 종료 시 필요한 작업을 추가하시면 됩니다.
 */
function onBackKeyDownMsg(button) {
	if (button == 2) {
		// 필요한 작업 추가할 부분
		navigator.app.exitApp();
	}
}

function GCM_Event(e) {
	/*
	 * GCM(Push) 서비스에서 이용하는 이벤트 리스너입니다. 모든 GCM 서비스 메시지는 이 함수를 통해 메시지를 주고 받습니다.
	 * 
	 * registerd : init후 GCM Plugin 에서 서비스 등록 성공 시 수행됩니다. message : Push 메시지가
	 * 도착하면 수행됩니다.
	 */
	console.log('GCM : Event');

	switch (e.event) {
	case 'registered':
		// This is where you would code to send the REGID and UDID to your
		// server for this device
		// you can include logic that save data(regid, udid) to server.
		/*
		 * GCM 서비스에 등록이 정상적으로 되면 GCM 서비스를 이용하기 위한 regid와 기기의 고유값인 udid가 넘어오게
		 * 됩니다. 아래 log에 해당 값을 확인할 수 있게 해 놓았습니다. 이 부분에 데이터베이스와 연동하여 로그인을 처리하면 될 것
		 * 같습니다.
		 */

		console.log('GCM_Registered regid : ' + e.regid);
		console.log('GCM_Registered udid : ' + e.udid);

		break

	case 'message':
		//
		// get Push Message Event Callback.
		// This message made in 'GCMIntentService.java' on 'onMessage'
		// Method
		// use JSONObject
		// you can use this message to change game menu and ETC
		//
		/*
		 * 네이티브 클래스 중 'GCMIntentService.java' 클래스가 있습니다. 이 클래스에서 onMessage() 부분을
		 * 보시면 Json 형태로 메시지를 만들어 주는 것을 볼 수 있습니다. 메시지의 형태는 서로 협의하여 정하면 될 것 같습니다.
		 * 현재는 어떤 메시지가 오는지 확인할 수 있도록 alert 창을 띄우게 되어있습니다. 이 부분에 Menu를 전환하는 코드를
		 * 넣으면 될 것 같습니다.
		 */
		alert(e.message);
		break;

	case 'error':

		break;

	default:

		break;
	}
}

function COMMON_Event(e) {
	/*
	 * 네이티브 플러그인에서 자바스크립트를 호출하기 위해 구현한 이벤트 리스너 함수입니다. 함수명은 임의로 작성하였으며, 네이티브 클래스
	 * 중 'BridgePlugin.java' 에서 이 이벤트 리스너를 이용하여 메시지를 전송하는 것을 볼 수 있습니다. 어떤 메시지를
	 * 전송할지에 대해 협의 후 코드를 작성하면 될 것 같습니다.
	 */
	console.log('Common Event');
	switch (e.event) {
	case 'network':
		alert(e.message);
		break;

	case 'menubutton':
		// get Activity Button Event Callback
		// index 1 ~ 6
		// you include changemenu logic use index
		/*
		 * 네이티브 버튼을 누르면 호출되는 부분입니다. 임의적으로 버튼을 삽입했고, 버튼을 누르면 index 가 넘어오게 됩니다.
		 */
		alert(e.index);
		// gotoMenu(e.index);
		common.changeMenuButton(e.index);
		break;

	case 'billingSuccess':
		/*
		 * 인앱 결제 성공 후 인앱에 관련된 메시지가 전송됩니다. Json 형태로 제공되니 적절히 분리하여 서버에 유지하시면
		 * 되겠습니다.
		 * 
		 * nonce : 주문 요청에 사용되는 일회용 번호입니다. notificationId : orderId : packageName :
		 * productId : purchaseTime : purchaseState : purchaseToken :
		 * developerPayload :
		 * 
		 * =========== 아직 미구현 ============
		 */
		console.log(e.data);
		break;

	case 'error':
		alert(e.message);
		break;

	default:
		break;
	}
}

// GCM(Push) Service Registerd Success callback
function GCM_Success(e) {
	console.log('GCM : Success');
}

// GCM(Push) Service Registerd Fail callback
function GCM_Fail(e) {
	console.log('GCM : Fail');
}

function successHandler(result) {
	alert("SUCCESS: \r\n" + result);
	console.log(result);
}

function errorHandler(error) {
	alert("ERROR: \r\n" + error);
}

/*
 * When you close application this function is called
 */
window.onbeforeunload = function(e) {

	if (gApp.gcmregid.length > 0) {
		// The same routines are called for success/fail on the unregister. You
		// can make them unique if you like
		window.GCM.unregister(GCM_Success, GCM_Fail); // close the GCM

	}
};

/*
 * JavaScript -> Native Plugin 호출 방법
 * 
 * Cordova.exec(successCallback, failCallback, pluginName, action, message);
 * 
 * 호출을 원하는 부분에서 위와 같은 코드를 호출하면 됩니다. Callback 함수를 작성 후 해당 위치에 넣어주시면 됩니다.
 * pluginName은 네이티브 코드에 작성되어있는 플러그인 클래스명을 넣어주면 됩니다. Action은 네이티브에서 1차적으로 분기할 수
 * 있는 Key입니다. message는 Array 형태로 전송되고, 네이티브에서 적절히 처리하면 됩니다.
 */
